package drp.snowbell.util.cfg;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import drp.snowbell.util.file.FileUtility;


public class XmlConfig implements IXmlConfig {

	@Override
	public void save(Object obj, String filePath) throws IOException {
		File fo = FileUtility.getFile(filePath);
		// 文件不存在,就创建该文件
		if (!fo.exists()) {
			// 先创建文件的目录
			File pFile = fo.getParentFile();
			pFile.mkdirs();
		}
		// 创建文件输出流
		FileOutputStream fos = new FileOutputStream(fo);
		// 创建XML文件对象输出类实例
		XMLEncoder encoder = new XMLEncoder(fos);
		// 对象序列化输出到XML文件
		encoder.writeObject(obj);
		encoder.flush();
		// 关闭序列化工具
		encoder.close();
		// 关闭输出流
		fos.close();
	}

	@Override
	public Object load(String filePath) throws IOException {
		File fin = FileUtility.getFile(filePath);
		return load(fin);
	}

	@Override
	public void save(Object obj, OutputStream out) throws IOException {
		XMLEncoder encoder = new XMLEncoder(out);
		// 对象序列化输出到XML文件
		encoder.writeObject(obj);
		encoder.flush();
		// 关闭序列化工具
		encoder.close();
	}

	@Override
	public Object load(InputStream in) throws IOException {
		XMLDecoder decoder = new XMLDecoder(in);
		Object obj = decoder.readObject();
		decoder.close();
		return obj;
	}

	@Override
	public Object load(File File) throws IOException {
		FileInputStream fis = new FileInputStream(File);
		XMLDecoder decoder = new XMLDecoder(fis);
		Object obj = decoder.readObject();
		fis.close();
		decoder.close();
		return obj;
	}
}
